昨天的文章中,已經把敵人技能的code實做出來了,但ChatGPT並沒有造先前的skill的interface來寫,所以發生一些錯誤,我們請ChatGPT修正一下code。
根據你提供的 ISkill
接口和 Character
類,我可以基於這個架構為暗影刺客(Shadow Assassin)設計技能。同時,為了適應你的技能接口,這些技能將包含魔法消耗(ManaCost)、冷卻時間(Cooldown),以及檢查技能是否能夠使用(CanUseSkill
)。
public class FatalStrike : ISkill
{
public string SkillName => "Fatal Strike";
public int ManaCost => 20;
public int Cooldown => 5;
public int CurrentCooldown { get; set; }
public void UseSkill(Character target)
{
// 如果冷卻時間未滿,不能使用技能
if (CurrentCooldown > 0)
{
Debug.Log($"{SkillName} is on cooldown for {CurrentCooldown} more turns.");
return;
}
float damage = 40; // 假設造成固定的 40 點傷害
target.TakeDamage(damage);
// 如果目標的血量低於 20%,直接擊殺
if (target.Health < target.Health * 0.2f)
{
Debug.Log("Fatal Strike: Instant kill activated!");
target.Health = 0;
}
// 重置冷卻時間
CurrentCooldown = Cooldown;
Debug.Log($"{SkillName} is used on {target.Name}. Cooldown is now {Cooldown} turns.");
}
public bool CanUseSkill(int currentMana)
{
return currentMana >= ManaCost && CurrentCooldown == 0;
}
}
public class ShadowCloak : ISkill
{
public string SkillName => "Shadow Cloak";
public int ManaCost => 15;
public int Cooldown => 6;
public int CurrentCooldown { get; set; }
public void UseSkill(Character user)
{
if (CurrentCooldown > 0)
{
Debug.Log($"{SkillName} is on cooldown for {CurrentCooldown} more turns.");
return;
}
// 暗影隱身效果,提升攻擊力並設置隱身
Debug.Log($"{user.Name} has become invisible!");
// 假設玩家進入隱身狀態的代碼和邏輯(如攻擊力提升)
// 重置冷卻時間
CurrentCooldown = Cooldown;
}
public bool CanUseSkill(int currentMana)
{
return currentMana >= ManaCost && CurrentCooldown == 0;
}
}
public class PoisonedBlade : ISkill
{
public string SkillName => "Poisoned Blade";
public int ManaCost => 10;
public int Cooldown => 4;
public int CurrentCooldown { get; set; }
public void UseSkill(Character target)
{
if (CurrentCooldown > 0)
{
Debug.Log($"{SkillName} is on cooldown for {CurrentCooldown} more turns.");
return;
}
// 對目標施加持續毒性傷害
Debug.Log($"{target.Name} is poisoned! Will take poison damage over time.");
// 假設目標中毒的代碼(例如在每回合生效的傷害邏輯)
// 重置冷卻時間
CurrentCooldown = Cooldown;
}
public bool CanUseSkill(int currentMana)
{
return currentMana >= ManaCost && CurrentCooldown == 0;
}
}
Character
使用技能當 Character
使用技能時,我們需要檢查魔法值和冷卻時間是否允許。這裡是一個簡單的使用技能流程:
public class PlayerController : MonoBehaviour
{
public Character player;
public Character enemy;
private ISkill fatalStrike;
private ISkill shadowCloak;
private ISkill poisonedBlade;
void Start()
{
player = new Character("Shadow Assassin", 100, 50);
enemy = new Character("Enemy", 120, 30);
fatalStrike = new FatalStrike();
shadowCloak = new ShadowCloak();
poisonedBlade = new PoisonedBlade();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Alpha1))
{
// 使用致命一擊
if (fatalStrike.CanUseSkill((int)player.Mana))
{
fatalStrike.UseSkill(enemy);
player.UseMana(fatalStrike.ManaCost);
}
else
{
Debug.Log("Not enough mana or skill is on cooldown.");
}
}
if (Input.GetKeyDown(KeyCode.Alpha2))
{
// 使用暗影隱身
if (shadowCloak.CanUseSkill((int)player.Mana))
{
shadowCloak.UseSkill(player);
player.UseMana(shadowCloak.ManaCost);
}
else
{
Debug.Log("Not enough mana or skill is on cooldown.");
}
}
if (Input.GetKeyDown(KeyCode.Alpha3))
{
// 使用毒刃
if (poisonedBlade.CanUseSkill((int)player.Mana))
{
poisonedBlade.UseSkill(enemy);
player.UseMana(poisonedBlade.ManaCost);
}
else
{
Debug.Log("Not enough mana or skill is on cooldown.");
}
}
// 每回合減少技能冷卻時間
fatalStrike.CurrentCooldown = Mathf.Max(fatalStrike.CurrentCooldown - 1, 0);
shadowCloak.CurrentCooldown = Mathf.Max(shadowCloak.CurrentCooldown - 1, 0);
poisonedBlade.CurrentCooldown = Mathf.Max(poisonedBlade.CurrentCooldown - 1, 0);
}
}
現在每個技能都有以下屬性:
在遊戲中,玩家可以通過檢查 CanUseSkill
來確定技能是否可用,並在每回合結束時更新冷卻時間。這個設計簡單而靈活,適合擴展到更多技能和角色。
在鐵人賽的最後,附上這次專案的GitHub連結,ChatGPT的聊天紀錄因為有用到生圖的功能就沒版法分享出來了。雖然最後並沒有把整個專案做完,但還是可以看到如果有一定的程式基礎,在實作專案時使用生成式AI是可以提高效率的,但在生出來的code上還是會有蠻多bug要修改的,如果不喜歡做Code Review可能也不太適合利用生成式AI來寫code。因為遊戲的雛形已經差不多完成了,之後有時間應該會把遊戲做完,再上傳到網頁讓大家試玩!